<?php

namespace Lib\Core;

class Request extends \Home {

    protected $JSON = array();

    public function __construct() {

        $contentType = !empty($_SERVER['CONTENT_TYPE']) ? strtolower(trim($_SERVER['CONTENT_TYPE'])) : '';
        if (strpos($contentType, 'application/json') !== false) {
            $body = @file_get_contents('php://input');
            $this->JSON = json_decode($body, true);
        }
    }

    /**
     * 获取一个post过来的值.
     *
     * @param string $name             Post名称.
     * @param bool   $htmlspecialchars 是否转义html.
     * @param string $defaultValue     默认值.
     *
     * @return string
     */
    protected function postParam($name, $htmlspecialchars = false, $defaultValue = '') {
        $val = !isset($_POST[$name]) ? $defaultValue : $_POST[$name];
        if ($htmlspecialchars) {
            $val = htmlspecialchars($val);
        }
        return $val;
    }

    /**
     * 获取一个全小写的post值.
     *
     * @param string $name             Post名称.
     * @param bool   $htmlspecialchars 是否转义html.
     * @param string $defaultValue     默认值.
     *
     * @return string
     */
    protected function postLowerParam($name, $htmlspecialchars = false, $defaultValue = '') {
        $val = !isset($_POST[$name]) ? $defaultValue : $_POST[$name];
        if ($htmlspecialchars) {
            $val = htmlspecialchars($val);
        }
        return strtolower($val);
    }

    /**
     * 获取整型的post值.
     *
     * @param string  $name Post名称.
     * @param integer $defaultValue 默认值.
     *
     * @return integer
     */
    protected function postInt($name, $defaultValue = 0) {
        return !isset($_POST[$name]) ? $defaultValue : (int) $_POST[$name];
    }

    /**
     * 是否post全过来参数.
     *
     * @return boolean
     */
    protected function isPost() {
        return empty($_POST) ? false : true;
    }

    /**
     * 获取post的值.
     *
     * @param array $parameters post中key的集合.
     *
     * @return array
     */
    protected function getPostParameters(array $parameters) {
        $result = array();
        foreach ($parameters as $v) {
            $result[$v] = $this->postParam($v, false, false);
        }
        return $result;
    }

    /**
     * 得到一个Post参数.
     *
     * @param string $name          POST key.
     * @param bool   $decode        是否 urldecode.
     * @param bool   $defaultValue  默认值.
     *
     * @return string
     */
    protected function getParam($name, $decode = false, $defaultValue = '') {
        $val = !isset($_GET[$name]) ? $defaultValue : $_GET[$name];
        if ($decode) {
            $val = urldecode($val);
        }
        return $val;
    }

    /**
     * 得到一个get的int.
     *
     * @param string  $name         key名称.
     * @param integer $defaultValue 默认值.
     *
     * @return integer
     */
    protected function getInt($name, $defaultValue = 0) {
        return !isset($_GET[$name]) ? $defaultValue : (int) $_GET[$name];
    }

    /**
     * 获取一个cookie.
     *
     * @param string $name         Cookie Key.
     * @param string $defaultValue 默认值.
     *
     * @return string
     */
    protected function getCookie($name, $defaultValue = '') {
        return !isset($_COOKIE[$name]) ? $defaultValue : $_COOKIE[$name];
    }

    protected function getUserMask($key = 'UserMask') {
        $mask = $this->getCookie($key);
        if ($mask) {
            return $mask;
        }
        $mask = md5(microtime(true) . $this->getIp() . mt_rand(0, 9999999999));
        \Lib\Util\Comm::setCookie($key, $mask, time() + 30 * 86400);
        return $mask;
    }

    /**
     * 是否get有值.
     *
     * @return boolean
     */
    protected function isGet() {
        return empty($_GET) ? false : true;
    }

    /**
     * 获取ip
     *
     * @param boolean $isLong 是否转换成long.
     *
     * @return integer|string
     */
    protected function getIp($isLong = false) {
        $ip = $_SERVER['REMOTE_ADDR'];
        if ($isLong) {
            $ip = ip2long($ip);
        }
        return $ip;
    }


}
